package cn.guo.action;


import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.apache.struts2.interceptor.RequestAware;


import cn.guo.entity.Film;
import cn.guo.entity.FilmType;
import cn.guo.service.IFilmService;
import cn.guo.service.IFilmTypeService;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.util.ValueStack;

/**
 * 影片管理模块控制器开发：
 * 1. 影片列表展示
 * 2. 添加影片
 * 3. 修改影片信息
 * 5. 删除
 *
 */
public class FilmAction extends ActionSupport implements ModelDriven<Film>, RequestAware{
	
	/*******一、封装数据********/
	private Film film = new Film();   // 【模型驱动】
	
	public void setFilm(Film film) {
		this.film = film;
	}
	public Film getFilm() {
		return film;
	}
	
//	获取模型
	public Film getModel() {
		return film;   // 返回实例化后的对象
	}
	
	// 封装请求的影片类型id(下拉列表的实际的值)
	private int tid;
	
	public int getTid() {
		return tid;
	}
	public void setTid(int tid) {
		this.tid = tid;
	}

	/*******二、注入影片Service********/
	private IFilmService filmService;
	
	
	public void setFilmService(IFilmService filmService) {
		this.filmService = filmService;
	}
	// 影片类型Service
	private IFilmTypeService filmTypeService;
	public void setFilmTypeService(IFilmTypeService filmTypeService) {
		this.filmTypeService = filmTypeService;
	}
	
	// 接收框架运行时候传入的代表request对象的map
	private Map<String, Object> request;
	public void setRequest(Map<String, Object> request) {
		this.request = request;
	}
	

	/**
	 * 1. 影片列表展示
	 */
	public String list() {
		// 查询所有影片
		List<Film> listFilm = filmService.getAll();
		// 保存到request
		request.put("listFilm", listFilm);
//		ActionContext.getContext().getValueStack().set("listFilm", listFilm);
		return "list";
	}
	
	/**
	 * 2. 添加影片 - 进入添加页面
	 */
	public String viewAdd(){
		// 查询所有影片类型信息, 保存到request
		List<FilmType> listFilmType = filmTypeService.getAll();
		request.put("listFilmType", listFilmType);
		return "add";
	}
	
	/**
	 * 2. 添加影片 - 添加影片数据
	 */
	public String save(){
		//System.out.println(tid+"------------------------------------------");
		// 先根据影片类型主键查询
		FilmType filmType = filmTypeService.findById(tid);
		// 设置到影片对象中
		film.setFilmType(filmType);
		film.setImg("images/ttnkh.jpg");
		System.out.println(film.toString());
		// 调用Service，保存影片
		filmService.save(film);
		
		return "listAction";  // 重定向到Action
	}
	
	/**
	 *  3. 修改影片信息 - 进入修改视图
	 */
	public String viewUpdate(){
		// 获取要修改的记录的id
		int id = film.getId();
		
		// 1. 根据影片的主键查询  (lazy="false")
		Film film = filmService.findById(id);  // 已经有影片类型信息
		// 2. 查询所有的影片类型
		List<FilmType> listFilmType =  filmTypeService.getAll();
		
		// 数据回显
		ValueStack vs = ActionContext.getContext().getValueStack();
		vs.pop();// 移除栈顶元素
		vs.push(film); // 入栈
		
		// 保存
		//ActionContext.getContext().getValueStack().set("listFilmType", listFilmType);
		request.put("listFilmType", listFilmType);
		return "edit";
	}
	
	/**
	 *  4. 修改影片信息 - 确认修改
	 */
	public String update() {
		
		//1. 先根据影片类型id， 查询影片类型对象; 再设置到影片属性中
		FilmType filmType = filmTypeService.findById(tid);
		film.setFilmType(filmType);
		film.setImg("images/ttnkh.jpg");
//		System.out.println(getModel().toString());
		//2. 更新影片
		filmService.update(film);
		
		return "listAction";  // 重定向到列表
	}
	
	/**
	 *  5. 修改影片信息 - 删除
	 */
	public String delete(){
		// 获取要删除影片的主键
		int fid = film.getId();
		// 调用service删除
		filmService.delete(fid);
		return "listAction";
	}
}

